package logger

import (
	"douhu_backend/internal/config"
	"douhu_backend/internal/log"
	"fmt"
	"sync"
)

var (
	once sync.Once
)

// Init 初始化日志系统（单例模式）
func Init() error {
	var err error
	once.Do(func() {
		if config.Conf.Log == nil {
			// 使用默认配置
			_, err = log.NewLogger(&log.Config{
				Level:        "info",
				SavePath:     "logs",
				Suffix:       "%Y%m%d%H%M",
				MaxAge:       7 * 24 * 3600, // 7天
				RotationTime: 24 * 3600,     // 24小时
				Debug:        true,
			})
		} else {
			// 验证配置
			if validateErr := config.Conf.Log.Validate(); validateErr != nil {
				err = validateErr
				return
			}
			_, err = log.NewLogger(config.Conf.Log)
		}

		// 验证日志实例是否创建成功
		if log.L == nil && err == nil {
			err = fmt.Errorf("logger instance is nil after initialization")
		}
	})
	return err
}

// Debug 调试日志
func Debug(args ...interface{}) {
	log.L.Debug(args...)
}

// Debugf 格式化调试日志
func Debugf(format string, args ...interface{}) {
	log.L.Debugf(format, args...)
}

// Info 信息日志
func Info(args ...interface{}) {
	log.L.Info(args...)
}

// Infof 格式化信息日志
func Infof(format string, args ...interface{}) {
	log.L.Infof(format, args...)
}

// Warn 警告日志
func Warn(args ...interface{}) {
	log.L.Warn(args...)
}

// Warnf 格式化警告日志
func Warnf(format string, args ...interface{}) {
	log.L.Warnf(format, args...)
}

// Error 错误日志
func Error(args ...interface{}) {
	log.L.Error(args...)
}

// Errorf 格式化错误日志
func Errorf(format string, args ...interface{}) {
	log.L.Errorf(format, args...)
}

// Fatal 致命错误日志
func Fatal(args ...interface{}) {
	log.L.Fatal(args...)
}

// Fatalf 格式化致命错误日志
func Fatalf(format string, args ...interface{}) {
	log.L.Fatalf(format, args...)
}

// GetLogger 获取原始日志实例（如果需要更底层的控制）
func GetLogger() interface{} {
	return log.L
}

// IsInitialized 检查日志是否已初始化
func IsInitialized() bool {
	return log.L != nil
}
